EC2 上の Kibana にも認証機能を追加する
概要
2018年4月に Amazon Elasticsearch Service の Kibana に Cognito を使って認証機能を付与できるようになりました。
私が今関わっているプロダクトは Amazon Elasticsearch Service では要件が合わず、EC2 上で Elasticsearch クラスタを構築しています。基本的には全文検索用途なのですが、Console による API 発行だったり、データビューアとしてだったり、X-Pack のモニタリングだったり Kibana を利用しています。ただお客様情報も入っているため、セキュリティグループによる IPアドレス制御だけではセキュリティとしては物足りません。
そこで ALB の認証機能を使って、Kibana on EC2 に認証を追加しました。認証基盤には Cognito User Pool を利用しました。
やってみた
手順は下記エントリの通りに設定するだけで大丈夫です。
前提
- Elasticsearch、Kibana のクラスタは構築済みであること
- Kibana の前段に ALB を配置し、アクセスできる状態であること
Cognito User Pool の作成
マネジメントコンソールから Cognito の画面へ遷移します。
「Manage User Pools」を選択します。
「Create a user pool」からユーザープールを作成します。
任意の名前を入力し、「Review deafults」を選択します。
確認画面から作成します。
ドメイン作成
ログイン画面の URL などに使われるドメインを作成します。左メニューの「Domain name」を選択します。
任意のサブドメインを入力します。
App client 作成
左メニューの「App clients」を選択します。
「App client name」に任意の名前を入力します。その他はデフォルト設定とします。
App client 設定
左メニューの「App client settings」を選択します。
- IdP は Cognito User Pool をチェック
- Callback URL はドキュメントを参考に ALB の Callback URL
- OAuth Flow は Authorization code grant
- OAuth Scopes は openid
を設定します。
ユーザー作成ポリシー
Cognito の標準認証 UI を利用するとユーザーによってサインアップが可能となっています。今回、ユーザー作成は管理者側のみとします。左メニューの「Policies」を選択します。
「Only allow administrators to create users」を選択します。
ユーザー作成
Kibana にログインするユーザーを作成します。左メニューの「Users and Groups」を選択します。
「Create User」からユーザーを作成します。
ALB 設定
ALB の設定から認証機能を追加します。
マネジメントコンソールから ALB の画面へ遷移します。
Listener 設定から対象となるリスナーを選択し、「Edit」を選択します。
Default Action に認証を追加します。
設定内容はプルダウンで出てきますので作成したユーザープール、App client を選択します。
動作確認
それでは動作を確認してみましょう。
ブラウザから Kibana(ALB)へアクセスします。
Cognito の標準認証 UI にリダイレクトされました。作成したユーザー名、パスワードでログインします。
初回ログイン時はパスワード変更を促されます。
パスワードを入力します。
Kibana にアクセスできました。非常に簡単ですね!
まとめ
いかがでしたでしょうか? ALB の認証機能追加により、EC2 上の Kibana にも簡単に認証機能を付与できました。